﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SGT_DAL._STG_DALTableAdapters;
using SGT_DAL;

namespace SGT_ON
{
    /// <summary>
    /// Clase utilizada para la presentación y propiedades derivadas.
    /// </summary>
    public partial class StockUnidadDeMedida
    {
        /// <summary>
        /// Se estado tiene que ser Activo|Inactivo
        /// </summary>
        public string EstadoString
        {
            get
            {
                if (EstaActivo == true)
                    return "Activo";
                else
                    return "Eliminado";
            }
            set
            {
                if (value.ToUpper() == "ACTIVO")
                    EstaActivo = true;
                else if (value.ToUpper() == "INACTIVO")
                    EstaActivo = false;
                else
                    throw new ArgumentException("No se ha especificado correctamente EstadoString puede ser: 'Activo'|'Inactivo'");
            }
        }
        public System.Drawing.Color EstadoColor
        {
            get
            {
                if (EstaActivo == false)
                {
                    return System.Drawing.Color.Red;
                }
                else
                {
                    return System.Drawing.Color.Green;
                }
            }
        }
        public bool EstadoPuedeActivar
        {
            get
            {
                if (EstaActivo == false)
                    return true;
                else
                    return false;
            }
        }
        public bool EstadoPuedeInactivar
        {
            get
            {
                if (EstaActivo == false)
                    return false;
                else
                    return true;
            }
        }
    }
    /// <summary>
    /// Clase base con la lógica de negocio
    /// </summary>
    [System.ComponentModel.DataObject]
    public partial class StockUnidadDeMedida
    {
        #region Atributos
        protected int _id;
        protected string _nombre;
        protected bool _estaActivo;        
        
        //Objetos asociados
        #endregion

        #region Propiedades
        public int ID
        {
            get
            {
                return _id;
            }
            set
            {
                _id = value;
            }
        }
        public string Nombre
        {
            get
            {
                return _nombre;
            }
            set
            {
                _nombre = value;
            }
        }
        public bool EstaActivo
        {
            get
            {
                return _estaActivo;
            }
            set
            {
                _estaActivo = value;
            }
        }
        
        
        //Objetos asociados

        //Propiedades derivadas
        #endregion

        #region Interfase DAL
        //objeto de la capa DAL
        private static StockUnidadDeMedidaTableAdapter _StockUnidadDeMedidaAD;
        protected static StockUnidadDeMedidaTableAdapter Adaptador
        {
            get
            {
                if (_StockUnidadDeMedidaAD == null)
                    _StockUnidadDeMedidaAD = new StockUnidadDeMedidaTableAdapter();

                return _StockUnidadDeMedidaAD;
            }
        }
        protected static StockUnidadDeMedida ObtenerPorID(int pID)
        {   
            _STG_DAL.StockUnidadDeMedidaDataTable _dt;

            _dt = Adaptador.ObtenerPorID(pID);

            // si tiene algo,
            if (_dt.Rows.Count > 0)
                return AsignarRowAObjeto((_STG_DAL.StockUnidadDeMedidaRow)_dt.Rows[0]);

            return null;
        }
        protected static StockUnidadDeMedida AsignarRowAObjeto(_STG_DAL.StockUnidadDeMedidaRow pRow)
        {
            StockUnidadDeMedida _StockUnidadDeMedida = new StockUnidadDeMedida();
            if (pRow != null)
            {
                _StockUnidadDeMedida = new StockUnidadDeMedida();
                _StockUnidadDeMedida.ID = pRow.ID;
                _StockUnidadDeMedida.Nombre = pRow.Nombre;
                _StockUnidadDeMedida.EstaActivo = pRow.EstaActivo;
            }
            return _StockUnidadDeMedida;
        }
        protected StockUnidadDeMedida Insertar(string pNombre,bool pEstaActivo)
        {
            ID = int.Parse(Adaptador.Insertar(pNombre, pEstaActivo).ToString());
            return this;
        }
        protected bool Actualizar(string pNombre, bool pEstaActivo, int pId)
        {
            if (0 < Adaptador.Actualizar(pNombre,pEstaActivo, pId))
                return true;
            else
                return false;
        }
        public void Eliminar()
        {
            StockUnidadDeMedida _StockUnidadDeMedida = StockUnidadDeMedida.ObtenerPorID(this.ID);
            _StockUnidadDeMedida.EstaActivo = false;
            _StockUnidadDeMedida.Actualizar();
        }
        protected static StockUnidadDeMedidaColeccion AsignarStockUnidadDeMedidaTableAdapterAStockUnidadDeMedidaColeccion(_STG_DAL.StockUnidadDeMedidaDataTable pDataTable)
        {
            StockUnidadDeMedidaColeccion _StockUnidadDeMedidaes = new StockUnidadDeMedidaColeccion();
            StockUnidadDeMedida _StockUnidadDeMedida;

            if ((pDataTable != null)
                && (pDataTable.Rows.Count > 0))
            {
                foreach (_STG_DAL.StockUnidadDeMedidaRow _row in pDataTable.Rows)
                {
                    _StockUnidadDeMedida = AsignarRowAObjeto(_row);
                    if (_StockUnidadDeMedida != null)
                        _StockUnidadDeMedidaes.Add(_StockUnidadDeMedida);
                }
            }
            return _StockUnidadDeMedidaes;
        }
        public static StockUnidadDeMedidaColeccion ObtenerTodosLosStockUnidadDeMedidaes()
        {
            return AsignarStockUnidadDeMedidaTableAdapterAStockUnidadDeMedidaColeccion(Adaptador.ObtenerTodosLosActivos());
        }
        /// <summary>
        /// Si el valor ingresado es "" o nulo, traigo todos
        /// </summary>
        /// <param name="pTexto"></param>
        /// <returns></returns>
        public static StockUnidadDeMedidaColeccion ObtenerPorTexto(string pTexto)
        {
            if((pTexto ==null)
                || (pTexto == ""))
                return AsignarStockUnidadDeMedidaTableAdapterAStockUnidadDeMedidaColeccion(Adaptador.ObtenerTodosLosActivos());
            else
                return AsignarStockUnidadDeMedidaTableAdapterAStockUnidadDeMedidaColeccion(Adaptador.ObtenerPorTexto(pTexto));
        }

        #endregion

        #region Métodos
        public StockUnidadDeMedida()
        {
            AsignarValoresIniciales();
        }

        public void AsignarValoresIniciales()
        {
            _id = -1;
            Nombre = "";
            EstaActivo = true;
        }

        public static StockUnidadDeMedida CrearStockUnidadDeMedida()
        {
            StockUnidadDeMedida _StockUnidadDeMedida = new StockUnidadDeMedida();
            return _StockUnidadDeMedida;
        }
        public static StockUnidadDeMedida CrearStockUnidadDeMedida(int pID)
        {
            StockUnidadDeMedida _StockUnidadDeMedida = ObtenerPorID(pID);
            return _StockUnidadDeMedida;
        }
        public void Actualizar()
        {
            Actualizar(this.Nombre, this.EstaActivo, this.ID);
        }
        public StockUnidadDeMedida Insertar()
        {
            return Insertar(this.Nombre, this.EstaActivo);
        }
        #endregion

        #region Metodos para datasource
        
        public void Actualizar(StockUnidadDeMedida pStockUnidadDeMedida)
        {
            if (pStockUnidadDeMedida != null)
                pStockUnidadDeMedida.Actualizar();
        }
        public StockUnidadDeMedida Insertar(StockUnidadDeMedida pStockUnidadDeMedida)
        {
            if (pStockUnidadDeMedida != null)
                return pStockUnidadDeMedida.Insertar();
            return null;
        }
        public void Eliminar(StockUnidadDeMedida pStockUnidadDeMedida)
        {
            pStockUnidadDeMedida.Eliminar();
        }
        #endregion
    }
    [System.ComponentModel.DataObject]
    public class StockUnidadDeMedidaColeccion : System.Collections.CollectionBase
    {
        public void Add(StockUnidadDeMedida pStockUnidadDeMedida)
        {
            this.List.Add(pStockUnidadDeMedida);
        }
        public void AddUnico(StockUnidadDeMedida pStockUnidadDeMedida)
        {
            foreach (StockUnidadDeMedida _StockUnidadDeMedida in this)
                if (pStockUnidadDeMedida.ID == _StockUnidadDeMedida.ID)
                    return;
            this.List.Add(pStockUnidadDeMedida);
        }
        public void Remove(int index)
        {
            if (index <= Count - 1 || index >= 0)
            {
                this.List.RemoveAt(index);
            }
            else
            {
                throw new System.ArgumentException("Fuera de rango", "original");
            }
        }
        public void Remove(StockUnidadDeMedida pStockUnidadDeMedida)
        {
            for (int i = 0; i < this.Count; i++)
            {
                if (this[i].ID == pStockUnidadDeMedida.ID)
                {
                    Remove(i);
                    return;
                }

            }
        }
        public StockUnidadDeMedida this[int index]
        {
            get { return ((StockUnidadDeMedida)(this.List[index])); }
            set { this.List[index] = value; }
        }
        public void ActualizarStockUnidadDeMedidaes(StockUnidadDeMedidaColeccion pStockUnidadDeMedidaes)
        {
            foreach (StockUnidadDeMedida _StockUnidadDeMedida in pStockUnidadDeMedidaes)
            {
                _StockUnidadDeMedida.Actualizar();
            }
        }
        public void ActualizarStockUnidadDeMedida(StockUnidadDeMedida pStockUnidadDeMedida)
        {
            pStockUnidadDeMedida.Actualizar();
        }

        #region Metodos de colección
        
        #endregion
        #region Para datasource
        public void Insertar(StockUnidadDeMedida pStockUnidadDeMedida)
        {
            pStockUnidadDeMedida.Insertar(pStockUnidadDeMedida);
        }
        #endregion
    }
}

